热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机房收费——存储过程+事务

早在数据库的时候就对存储过程和事务有了一个基本了解,可是从来没实战过,这次机房重构有机会用一下,真的很好哎,好了,废话不多说,我们来了解一下怎么使用吧。一、存储过程1、定义:存储过程是在大型数据库系统

早在数据库的时候就对存储过程和事务有了一个基本了解,可是从来没实战过,这次机房重构有机会用一下,真的很好哎,好了,废话不多说,我们来了解一下怎么使用吧。

一、存储过程

1、定义:

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

2、使用:

(1)创建存储过程

create procedure sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
(2)调用存储过程
基本语法:exec sp_name [参数名]
(3)删除存储过程
1.基本语法:
drop procedure sp_name
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程。

3、优缺点:

优点:

(1)重复使用;
(2)减少网络流量;
(3)安全性。

缺点:

(1)调试麻烦
(2)移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
(3)重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译。
(4)如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

二、事务

定义:

事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

三、存储过程+事务实现注册:

ALTER PROCEDURE [dbo].[PROC_Regist] 
-- Add the parameters for the stored procedure here
@Cardno char(10),
@StudentNo char(10),
@Cash varchar(50),
@Type char(50),
@Status char(50),
@registDate char(10),
@registTime char(10),
@Holder char(10),
@StudentName char(10),
@Sex char(10),
@Department char(10),
@Grade char(10),
@onClass char(10),
@reDate char(10),
@reTime char(10),
@AddMoney char(10),
@reHolder char(10)
AS
BEGIN
DECLARE @Err1 INT,@Err2 INT,@Err3INT--定义错误计数器
BEGIN TRANSACTION--开始事务
--添加卡表
insert into T_CardInfo (Cardno ,Cash,Type,Status ,registDate ,registTime ,Holder) values (@Cardno,@Cash,@Type,@Status,@registDate ,@registTime ,@Holder)
set @err1=@@error--出错给错误计数器赋值,变量不为0
--添加学生表
insert into T_StudentInfo (Cardno,StudentNo,StudentName ,Sex,Department ,Grade,onClass,Holder)values (@Cardno,@StudentNo,@StudentName,@Sex,@Department ,@Grade,@onClass,@Holder)
set @Err2=@@error--出错给错误计数器赋值,变量不为0
--添加到充值记录表
insert into T_RechargeInfo (Cardno,AddMoney,ReDate,ReTime,Status,reHolder)values (@cardno,@reDate,@reTime,@AddMoney,@Status,@reHolder)
set @err3=@@ERROR--出错给错误计数器赋值,变量不为0

if @Err1=0 and @Err2=0 and @err3=0--判断错误计数器中的值是否为0
COMMIT TRANSACTION--提交事务
ELSE
ROLLBACK TRANSACTION--回滚,回到原始状态
END

D层代码展示:

        Dim sql As String = "PROC_Regist" '创建存储过程的名字
Dim sqlparams As SqlParameter() = {New SqlParameter("@Cardno", e_stucard.Cardno),
New SqlParameter("@Type", e_stucard.Type),
New SqlParameter("@Status", e_stucard.Status),
New SqlParameter("@Holder", e_stucard.Holder),
New SqlParameter("@StudentNo", e_stucard.Studentno),
New SqlParameter("@StudentName", e_stucard.StudentName),
New SqlParameter("@Grade", e_stucard.Grade),
New SqlParameter("@Department", e_stucard.Department),
New SqlParameter("@onClass", e_stucard.onClass),
New SqlParameter("@Sex", e_stucard.Sex),
New SqlParameter("@registDate", e_stucard.registDate),
New SqlParameter("@registTime", e_stucard.registTime),
New SqlParameter("@reDate", e_recharge.reDate),
New SqlParameter("@reTime", e_recharge.reTime),
New SqlParameter("@Cash", e_stucard.Cash),
New SqlParameter("@AddMoney", e_recharge.AddMoney),
New SqlParameter("@reHolder", e_recharge.reHolder)}
Dim flag As Boolean
flag = sqlhelper.ExecAddDelUpdate(sql, CommandType.StoredProcedure, sqlparams)
Return flag

四、总结

在用存储过程时遇到不少问题,但都顺利解决了,有很多细节的问题,感悟就是敲代码要带着脑子,还要细心+认真,否则小小的错误就会让我们失去很多时间。




推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
author-avatar
snailslowdx_619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有